<?php if (!defined('BASEPATH'))exit('No direct script access allowed');

include_once 'main.php';

/**
 * Controller para ações de configurações gerais do sistema
 * 
 * @author Douglas Rafael
 * @package controllers     
 */
class Config extends Main {

    public function __construct() {
        parent::__construct();
        //Verifica se o usuário estar logado no sistema
        $this->verificaLogado();
        
        // Carrega o model DAOItem
        $this->load->model('DAOConfig');
        
        //Seta propriedades do template
        $arr_js = $this->config->item('js');
        array_push($arr_js, 'maskedinput');
        array_push($arr_js, 'jquery.maskMoney');        
        array_push($arr_js, 'jquery.alphanumeric.pack');
        array_push($arr_js, 'jquery.lightbox-0.5');
        $this->template->load_js($arr_js);
        $this->template->set('title', 'Configurações do sistema || ' . $this->title);
        $this->template->set('page_title', 'Configurações gerais do sistema');
        $this->template->unset_var('page_infor');
    }

    public function index() {
        $this->listar();
    }

    /**
     * Carrega a view com as configurações gerais do sistema
     */
    public function listar() {
        try {
            $this->verificaPermissao(ControleAcesso::CONFIG_SYSTEM);
            
            //data
            $data['config'] = $this->DAOConfig->get_config();

            $this->template->load(NULL, 'config_list', $data);
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->view_list_config();
        }
    }
    
    /**
     * Atualiza as configurações do sistema
     * 
     * @throws ExceptionValidacao
     */
    public function atualizar() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("codigo", "Código", "trim|required|is_natural|exact_lenght[6]|xss_clean");
            $this->form_validation->set_rules("nome", "Nome da Biblioteca", "trim|required|min_length[4]|xss_clean");
            $this->form_validation->set_rules("endereco", "Endereço", "trim|required|min_length[4]|xss_clean");
            $this->form_validation->set_rules("telefone", "Telefone", "trim|required|exact_length[15]|xss_clean");
            $this->form_validation->set_rules("email", "Email", "trim|required|valid_email|xss_clean");
            $this->form_validation->set_rules("fakeImagem_logomarca", "Logomarca", "trim|required|xss_clean");
            $this->form_validation->set_rules("limite_emprestimo", "Limite empréstimo", "trim|required|is_natural_no_zero|min_length[1]|xss_clean");
            $this->form_validation->set_rules("limite_item_emprestimo", "Limite de itnes por empréstimo", "trim|required|is_natural_no_zero|min_length[1]|xss_clean");
            $this->form_validation->set_rules("auto_multa", "Auto Multa", "trim|required|is_natural|exact_lenght[1]|xss_clean");
            $this->form_validation->set_rules("tema", "Tema", "trim|xss_clean");
            $this->form_validation->set_rules("timezone", "Timezone (Fuso Horário)", "trim|xss_clean");
            $this->form_validation->set_rules("data_implantacao", "Data de implantação", "trim|required|xss_clean");
            $auto_multa = $this->input->post('auto_multa', TRUE);
            if ($auto_multa) { // Se o auto multa for ativado
                $this->form_validation->set_rules("periodo_multa", "Período de atraso", "trim|required|is_natural_no_zero|min_length[1]|xss_clean");
                $this->form_validation->set_rules("valor_multa", "Valor da multa", "trim|required|xss_clean");
                $this->form_validation->set_rules("alerta_multa", "Ativar alerta de multa", "trim|required|xss_clean");
            }
            $status_email = $this->input->post('email_status', TRUE);
            if ($status_email) { // Se o módulo e-mail for ativado
                $this->form_validation->set_rules("smtp_host", "Host SMPT", "trim|required|min_length[5]|xss_clean");
                $this->form_validation->set_rules("smtp_port", "Porta SMTP", "trim|required|is_natural_no_zero|min_length[2]|xss_clean");
                $this->form_validation->set_rules("smtp_user", "usuário/E-Mail SMPT", "trim|required|valid_email|xss_clean");
                $this->form_validation->set_rules("smtp_pass", "Senha do usuário/e-mail SMTP", "trim|required|min_length[2]");
            }

            if ($this->form_validation->run() == FALSE) {
                throw new ExceptionValidacao(validation_errors());
            } else {
                $config = new TOConfig();
                $config->id = $this->input->post('codigo', TRUE);
                $config->nome_instituicao = $this->input->post('nome', TRUE);
                $config->endereco = $this->input->post('endereco', TRUE);
                $config->telefone = $this->input->post('telefone', TRUE);
                $config->email = $this->input->post('email', TRUE);
                $config->limit_emprestimo = $this->input->post('limite_emprestimo', TRUE);
                $config->limit_item_emprestimo = $this->input->post('limite_item_emprestimo', TRUE);
                $config->data_implantacao = format_date($this->input->post('data_implantacao', TRUE), FALSE, TRUE);
                // Se o auto multa for ATIVADO recebe os valores se não o valor é NULL
                $config->auto_multa = $auto_multa;                
                $config->periodo_multa = $auto_multa ? $this->input->post('periodo_multa', TRUE) : NULL;
                $config->valor_multa   = $auto_multa ? $this->input->post('valor_multa', TRUE) : NULL;
                $config->alerta_multa  = $auto_multa ? $this->input->post('alerta_multa', TRUE) : NULL;
                // Se o módulo de e-mail for ATIVADO recebe os valores se não o valor é NULL
                $config->modulo_email_status = $status_email;                
                $config->smtp_host = $status_email ? $this->input->post('smtp_host', TRUE) : NULL;
                $config->smtp_port = $status_email ? $this->input->post('smtp_port', TRUE) : NULL;
                $config->smtp_user = $status_email ? $this->input->post('smtp_user', TRUE) : NULL;
                $config->smtp_pass = $status_email ? $this->input->post('smtp_pass', FALSE) : NULL; //XSS como FALSE, pois se for TRUE e tiver caracteres especiais, ; é acrecentado indevidamente
                $config->tema = $this->input->post('tema', TRUE);
                $config->timezone = $this->input->post('timezone', TRUE);
                
                /**
                 * Faz upload da imagem caso ela exista
                 */
                $imagem = $this->input->post('fakeImagem_logomarca', TRUE);
                $imagem_original = $this->input->post('imagem_original_logomarca', TRUE);
                $this->load->model('UploadImage'); // carrega o Model que contem o método para upload
                if (!empty($imagem) && $imagem != $imagem_original) {
                    //APAGA a IMAGEM ANTIGA do diretorio
                    $this->UploadImage->delete_image($this->config->item('path_img_logo'), $imagem_original);
                    $this->UploadImage->do_upload($this->config->item('path_img_logo'), 'logo', 400, 260, FALSE, NULL, NULL, TRUE);
                }
                
                // Atualiza os dados
                $this->DAOConfig->update_config($config);
                // Salva na sessão atualizações
                Main::check_config();
                
                Mensagem::setMensagemSucesso("Configurações do sistema atualizadas com sucesso!");
                $this->index();
            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->index();
        }
    }
    
    /**
     * Envia e-mail par averificação de dados SMTP
     */
    public function valid_config_email() {
        try {
            $this->load->library('form_validation');
            $this->form_validation->set_rules("nome", "Name da biblioteca", "trim|required|min_length[4]|xss_clean");
            $this->form_validation->set_rules("smtp_host", "Host SMPT", "trim|required|min_length[5]|xss_clean");
            $this->form_validation->set_rules("smtp_port", "Porta SMTP", "trim|required|is_natural_no_zero|min_length[2]|xss_clean");
            $this->form_validation->set_rules("smtp_user", "usuário/E-Mail SMPT", "trim|required|valid_email|xss_clean");
            $this->form_validation->set_rules("smtp_pass", "Senha do usuário/e-mail SMTP", "trim|required|min_length[2]");

            if ($this->form_validation->run() == FALSE) {
                echo validation_errors();
            } else {
                $this->load->library('email');
                
                /**
                 * Config do e-mail
                 */
                $config_email['protocol']  = 'smtp';
                $config_email['mailtype']  = 'html';
                $config_email['charset']   = 'utf-8';
                $config_email['wordwrap']  = TRUE;
                $config_email['smtp_host'] = $this->input->post('smtp_host', TRUE);
                $config_email['smtp_port'] = $this->input->post('smtp_port', TRUE);
                $config_email['smtp_user'] = $this->input->post('smtp_user', TRUE);
                $config_email['smtp_pass'] = $this->input->post('smtp_pass');
                
                $this->email->initialize($config_email);
                
                /**
                 * E-Mail
                 */
                $this->email->from($this->config->item('email_desenv'), 'SISBION - Sistema Bibliotecário Online');
                $this->email->to($config_email['smtp_user']); 
                $this->email->subject("Validação de E-Mail SMTP");
                $this->email->message('<div style="background:#eee; border:1px solid #ccc; padding:5px 25px"><br />
                                    Ol&aacute;, <strong><span style="font-size:16px">' . $this->input->post('nome', TRUE) . '</span></strong>. Se voc&ecirc; recebeu essa notifica&ccedil;&atilde;o tudo indica que a configura&ccedil;&atilde;o de e-mail para o sistema <em><strong>SISBION - Sistema Bibliotec&aacute;rio Online</strong></em> foi validada com sucesso!<br />
                                    Agora voc&ecirc; poder&aacute; utilizar todos os recursos fornecidos pelo m&oacute;dulo, como enviar e-mails para usu&aacute;rios do sistema...<br />
                                    <br />
                                    <strong>N&atilde;o esque&ccedil;a de salvar as configura&ccedil;&otilde;es no sistema.</strong><br />
                                    &nbsp;</div>
                                    <div style="background:#eee; border:1px solid #ccc; padding:5px 25px"><em>Obrigado,<br />
                                    <strong>SISBION </strong>- Sistema bibliotec&aacute;rio online</em><br />
                                    &nbsp;</div>
                                    <p style="text-align:right"><span style="font-size:10px">Conte&uacute;do gerado automaticamente, por favor n&atilde;o responder.<br />
                                    <em>' . format_date(date('Y-m-d h:i:s')) . '</em></span></p>');

                // TENTA ENVIAR E-MAIL
                // É utilizado echo por causa do json
                if ($this->email->send()) {
                    echo TRUE; // E-Mail enviado
                } else {
                    echo 'erro'; // Flaha no envio
                }

            }
        } catch (Exception $erro) {
            Mensagem::setExcecao($erro);
            $this->view_list_config();
        }
    }
        

    private function view_list_config() {
        $this->template->load(NULL, 'config_list');
    }

}